package com.jhz.speedy.component.image;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.widget.ImageView;

import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
import com.bumptech.glide.request.RequestOptions;
import com.jhz.speedy.R;

/**
 * 图片加载
 * Created by JunHeZ on 2017/6/28.
 */
public class ImageLoad{
    /**
     * 不圆角
     */
    public static final int ROUND_NO = 0;

    /**
     * 圆形
     */
    public static final int CIRCLE = -1;


    private static int RESID_PLACEHOLDER = R.mipmap.ic_launcher;    //占位图片
    private static int RESID_ERROR = R.mipmap.ic_launcher;      //异常图片
    private static int RESID_FALLBACK = R.mipmap.ic_launcher;   //当url为空时，显示图片

    /**
     * 加载本地图片
     */
    public static void loadLocalImage(Context context, int resId, ImageView view) {
        RequestBuilder<Drawable> drawableRequestBuilder = GlideApp.with(context).load(resId);
        drawableRequestBuilder.into(view);
    }

    /**
     * 加载网路图片
     */
    public static void loadImage(Context context, String url, ImageView imageView){
        loadImage(context, url, ROUND_NO,imageView);
    }

    /**
     * 加载网路图片
     * @param context   c
     * @param url   地址
     * @param roundSize 圆角，
     * @param imageView 视图
     */
    public static void loadImage(Context context, String url, int roundSize, ImageView imageView){
        loadImage(context, url, roundSize, RESID_PLACEHOLDER, RESID_ERROR, RESID_FALLBACK, imageView);
    }


    /**
     * 加载网路图片
     * @param url   地址
     * @param roundSize 圆角
     * @param resIdPlaceholder  占位图片
     * @param resIdError    错误图片
     * @param resIdFallback 空地址
     * @param imageView 视图
     */
    public static void loadImage(Context context, String url, int roundSize, int resIdPlaceholder, int resIdError, int resIdFallback, ImageView imageView){
        GlideRequest glideRequest = GlideApp.with(context)
                .asBitmap()//指定Bitmap类型的RequestBuilder
                .load(url)//网络URL
                .placeholder(resIdPlaceholder)//占位图片
                .error(resIdError)//异常图片
                .fallback(resIdFallback);    // 空地址

        // 圆角处理
        BitmapTransformation transformation;
        switch (roundSize){
            case ROUND_NO: // 不圆角
                // 默认就是不圆角，不做操作
                break;

            case CIRCLE:  // 圆形
                transformation = new GlideCircleTransform();
                glideRequest = glideRequest.apply(new RequestOptions().transform(transformation));
                break;

            default:    // 圆角
                transformation = new GlideRoundTransform(roundSize);
                glideRequest = glideRequest.apply(new RequestOptions().transform(transformation));
                break;
        }

        glideRequest.into(imageView);//当url为空时，显示图片
    }

    /**
     * 预先加载资源
     */
    public static void startPreload(Context context, String url) {
        GlideApp.with(context).asBitmap()
                .load(url)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .preload();
    }

    /**
     * 预先下载原始图片资源后，本地加载
     */
    public static void loadPreloadImage(Context context, String url, ImageView imageView) {
        GlideApp.with(context)
                .asBitmap()
                .load(url)
                .placeholder(RESID_PLACEHOLDER)//占位图片
                .error(RESID_ERROR)//异常图片
                .fallback(RESID_FALLBACK)    // 空地址
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(imageView);
    }

    /**
     * 复用的ImageView加载图片
     */
    public static void loadReuseImageView(Context context, String url, ImageView imageView){
        loadReuseImageView(context, url, ROUND_NO, imageView);
    }

    /**
     * 复用的ImageView加载图片
     *
     * 如果被加载的View是复用的，需要调这个，先清除旧的
     *
     * 因为有下列特殊情况：
     * View之前加载了其他图片的，如今复用加载新图片地址为空时，会显示以前的图片
     */
    public static void loadReuseImageView(Context context, String url, int roundSize, ImageView imageView){
        if(TextUtils.isEmpty(url)){
            //清空旧数据的引用
            GlideApp.with(context).clear(imageView);
        }

        loadImage(context, url, imageView);
    }

}
